//package com.zmn.plat.dubbo.interfaces.area;
//
//import com.zmn.common.dictionary.KvModel;
//import com.zmn.common.dto.AreaDTO;
//import com.zmn.common.dto.VtDTO;
//import com.zmn.common.dto2.ResponseDTO;
//import com.zmn.plat.common.dto.PermitDTO;
//import com.zmn.plat.common.dto.area.AreaDRO;
//import com.zmn.plat.common.dto.area.CitySimpleDRO;
//import com.zmn.plat.dubbo.utils.DubboConsts;
//import io.swagger.annotations.Api;
//import io.swagger.annotations.ApiOperation;
//import io.swagger.annotations.ApiParam;
//
//import javax.validation.constraints.*;
//import java.util.List;
//import java.util.Map;
//
///**
// * 区域：省、市、区、县接口，包括公司区域
// * <p>
// * ApiOperation：https://blog.csdn.net/dejunyang/article/details/89527273 ApiParam(required = “是否必须参数”, name = “参数名称”, value = “参数具体描述”
// *
// * @author tanbiao
// * @since 2019/12/24 16:40
// */
//@Api(value = "省市区查询服务", tags = {"区域查询"})
//public interface BaseAreaListRemoteService {
//
//    /**
//     * 根据城市ID查询城市贺省份信息
//     *
//     * @param cityId
//     *            区域ID
//     * @return AreaDRO 区域DRO实体
//     */
//    @ApiOperation(value = "根据城市ID查询城市和省份信息", response = ResponseDTO.class, tags = {"区域查询", "ID查询"})
//    ResponseDTO<AreaDRO> getCityAndProvinceByCityId(@NotNull(message = "cityId不能为空") @Positive(message = "cityId必须为大于0的正整数") @ApiParam(value = "城市id", required = true) Integer cityId);
//
//    /**
//     * 查询区域
//     *
//     * @param areaId
//     *            区域ID
//     * @return AreaDRO 区域DRO实体
//     */
//    @ApiOperation(value = "查询区域-ID", response = ResponseDTO.class, tags = {"区域查询", "ID查询"})
//    ResponseDTO<AreaDRO> getById(@NotNull(message = "areaId不能为空") @Positive(message = "areaId必须为大于0的正整数") @ApiParam(value = "区域id", required = true) Integer areaId);
//
//    /**
//     * 查询区域
//     *
//     * @param code
//     *            区域编码
//     * @return AreaDRO 区域DRO实体
//     */
//    @ApiOperation(value = "查询区域-CODE", response = ResponseDTO.class, tags = {"区域查询", "CODE查询"})
//    ResponseDTO<AreaDRO> getByCode(@NotNull(message = "code不能为空") @Positive(message = "code必须为大于0的正整数") @ApiParam(value = "区域编码", required = true) Integer code);
//
//    /**
//     * 查询区域（4级区县）
//     *
//     * @param longitude
//     *            经度
//     * @param latitude
//     *            纬度
//     * @return AreaDRO 区域DRO实体
//     * @auther tanghongjun
//     * @since 2019/6/28 15:42
//     */
//    @ApiOperation(value = "经纬度定位区域", response = ResponseDTO.class, tags = {"区域查询", "经纬度搜索", "4级区县"}, notes = "同时返回上级区域")
//    ResponseDTO<AreaDRO> getByLatAndLng(@NotNull(message = "longitude不能为空") @ApiParam(value = "经度", required = true) Double longitude,
//        @NotNull(message = "latitude不能为空") @ApiParam(value = "纬度", required = true) Double latitude);
//
//    @ApiOperation(value = "查询详细地扯", response = ResponseDTO.class, tags = {"区域查询", "地扯查询"})
//    ResponseDTO<AreaDRO> getAreaByAddress(@NotBlank(message = "address不能为空") @ApiParam(value = "详细地扯", required = true) String address);
//
//    /**
//     * 计息距离：计算工程师到指定区域的距离
//     *
//     * @param districtId
//     *            区/县ID
//     * @param longitude
//     *            经度
//     * @param latitude
//     *            纬度
//     * @return 米
//     */
//    @ApiOperation(value = "计算距离", response = ResponseDTO.class, notes = "计算工程师到指定区域的距离", tags = {"区域查询", "经纬度搜索"})
//    ResponseDTO<Double> getDistanceByDistrictIdAndLongitudeAndLatitude(
//        @NotNull(message = "districtId不能为空") @Positive(message = "districtId必须为大于0的正整数") @ApiParam(value = "区/县ID", required = true) Integer districtId,
//        @NotNull(message = "longitude不能为空") @ApiParam(value = "经度", required = true) Double longitude, @NotNull(message = "latitude不能为空") @ApiParam(value = "纬度", required = true) Double latitude);
//
//    /**
//     * 根据区域名称查询区域
//     *
//     * @param areaName
//     *            区域名称
//     * @return AreaDRO集合
//     */
//    @ApiOperation(value = "根据区域名称查询区域", response = ResponseDTO.class, notes = "根据区域名称查询区域", tags = {"区域查询"})
//    ResponseDTO<List<AreaDRO>> getAreaInfoByName(@NotBlank(message = "areaName不能为空") @ApiParam(value = "区域名称", required = true) String areaName);
//
//    /**
//     * 取得指定等级及以上的区域列表
//     * @param status 状态
//     * @return
//     */
//    @ApiOperation(value = "取得指定等级及以上的区域列表", response = ResponseDTO.class, notes = "取得指定等级及以上的区域列表", tags = {"区域查询"})
//    ResponseDTO<List<AreaDRO>> listAboveByLevel(@NotNull(message = "level不能为空") @Positive(message = "level必须为大于0的正整数") @ApiParam(value = "级别", required = true) Integer level,
//                                                @NotNull(message = "status不能为空") @Positive(message = "status必须为大于0的正整数") @ApiParam(value = "状态", required = true) Integer status);
//    /**
//     * 根据城市名称集合查询城市和省份信息
//     *
//     * @param areaNameList
//     *            区域名称集合
//     * @return AreaDRO集合
//     */
//    @ApiOperation(value = "根据城市名称集合查询城市和省份信息", response = ResponseDTO.class, notes = "城市名称集合长度不能超过" + DubboConsts.MAX_PARAM_LENGTH, tags = "名称查询")
//    ResponseDTO<List<AreaDRO>> listProvinceAndCityByCityNameList(@NotEmpty(message = "areaNameList参数不能为空且个数不能超过" + DubboConsts.MAX_PARAM_LENGTH) @Size(min = 1, max = DubboConsts.MAX_PARAM_LENGTH,
//        message = "areaNameList参数不能为空且个数不能超过" + DubboConsts.MAX_PARAM_LENGTH) @ApiParam(value = "区域名称集合", required = true) List<String> areaNameList);
//
//    /**
//     * 根据父Id取得所有子区域列表
//     *
//     * @param parentId
//     *            上级区域ID
//     * @return 子区域集合
//     */
//    @ApiOperation(value = "根据父Id取得所有子区域列表", response = ResponseDTO.class, notes = "根据父Id取得所有子区域列表", tags = "父级id查询")
//    ResponseDTO<List<VtDTO>> listAreaVtByParentId(@NotNull(message = "parentId不能为空") @Positive(message = "parentId必须为大于0的正整数") @ApiParam(value = "区/县ID", required = true) Integer parentId);
//
//    /**
//     * 根据多个父Id取得所有子区域列表
//     *
//     * @param parentIdList
//     *            上级区域ID
//     * @return 子区域集合
//     */
//    @ApiOperation(value = "根据父Id取得所有子区域列表", response = ResponseDTO.class, notes = "根据父Id取得所有子区域列表", tags = "父级id查询")
//    ResponseDTO<List<VtDTO>> listAreaVtByParentId(@ApiParam(value = "区/县ID集合", required = true) List<Integer> parentIdList, Integer level);
//    /**
//     * 根据父Id取得所有子区域列表
//     *
//     * @param parentId
//     *            上级区域ID
//     * @param level
//     *            区域等级，2省份，3城市，4区县
//     * @return 子区域集合
//     */
//    @ApiOperation(value = "根据父Id取得所有子区域列表", response = ResponseDTO.class, notes = "level参数在实现中没有用到", tags = {"父级id"})
//    ResponseDTO<List<VtDTO>> listAreaVtByParentId(@NotNull(message = "parentId不能为空") @Positive(message = "parentId必须为大于0的正整数") @ApiParam(value = "区/县ID", required = true) Integer parentId,
//        @ApiParam(value = "城市级别", required = false) Integer level);
//
//    @ApiOperation(value = "根据父Id取得所有子区域列表", response = ResponseDTO.class, notes = "level参数在实现中没有用到", tags = {"父级id", "人员权限"})
//    ResponseDTO<List<VtDTO>> listAreaVtByParentId(@NotNull(message = "parentId不能为空") @Positive(message = "parentId必须为大于0的正整数") @ApiParam(value = "区/县ID", required = true) Integer parentId,
//        @ApiParam(value = "城市级别", required = false) Integer level, @NotNull(message = "limitPermit不能为空") @ApiParam(value = "是否过滤数据权限", required = true) Boolean limitPermit);
//
//    /**
//     * 根据父Id和用户id取得所有子区域列表
//     *
//     * @param parentId
//     *            上级区域ID
//     * @param level
//     *            区域等级，2省份，3城市，4区县(实现里面没用到该参数，因此添加过时)
//     * @return 子区域集合
//     * @see BaseAreaListRemoteService#listAreaVtByParentIdAndStaffId(java.lang.Integer, java.lang.Integer)
//     */
//    @Deprecated
//    @ApiOperation(value = "根据父Id取得所有子区域列表", response = ResponseDTO.class, notes = "level参数在实现中没有用到", tags = {"父级id", "员工id"})
//    ResponseDTO<List<VtDTO>> listAreaVtByParentId(@NotNull(message = "parentId不能为空") @Positive(message = "parentId必须为大于0的正整数") @ApiParam(value = "区/县ID", required = true) Integer parentId,
//        @ApiParam(value = "城市级别") Integer level, @ApiParam(value = "用户id") Integer staffId);
//
//    @ApiOperation(value = "根据父Id取得所有子区域列表", response = ResponseDTO.class, notes = "根据父Id取得区域列表", tags = {"父级id", "员工id"})
//    ResponseDTO<List<VtDTO>> listAreaVtByParentIdAndStaffId(@NotNull(message = "parentId不能为空") @Positive(message = "parentId必须为大于0的正整数") @ApiParam(value = "区/县ID", required = true) Integer parentId,
//        @ApiParam(value = "用户id") Integer staffId);
//
//    @ApiOperation(value = "根据父Id取得所有子区域列表", response = ResponseDTO.class, notes = "根据父Id取得区域列表", tags = {"父级id", "员工id", "层级"})
//    ResponseDTO<List<VtDTO>> listAreaVtByParentIdAndStaffId(@ApiParam(value = "区/县ID", required = true) List<Integer> parentIdList,
//                                                            @ApiParam(value = "用户id") Integer staffId, Integer level);
//    /**
//     * 根据父区域ID获取所有子区域的完成实体信息
//     *
//     * @param parentId
//     *            上级区域ID
//     * @return 下级区域AreaDRO集合
//     */
//    @ApiOperation(value = "根据父区域ID获取所有子区域的完成实体信息", response = ResponseDTO.class, notes = "根据父Id取得区域列表", tags = {"父级id"})
//    ResponseDTO<List<AreaDRO>> listAreaInfoByParentId(@NotNull(message = "parentId不能为空") @Positive(message = "parentId必须为大于0的正整数") @ApiParam(value = "区/县ID", required = true) Integer parentId);
//
//    @ApiOperation(value = "根据父区域ID获取所有子区域的完成实体信息", response = ResponseDTO.class, notes = "staffId为空不过滤数据权限", tags = {"父级id", "员工id"})
//    ResponseDTO<List<AreaDRO>> listAreaInfoByParentId(@NotNull(message = "parentId不能为空") @Positive(message = "parentId必须为大于0的正整数") @ApiParam(value = "区/县ID", required = true) Integer parentId,
//        @ApiParam(value = "员工id") Integer staffId);
//
//    /**
//     * 描述: 获取所有的市
//     *
//     * @return com.zmn.common.dto. ResponseDTO<com.zmn.common.dto.VtDTO>
//     * @author wangjie
//     * @since 15:39 2019/4/23
//     **/
//    @ApiOperation(value = "获取所有的市", response = ResponseDTO.class, notes = "获取所有的市", tags = {"所有城市"})
//    ResponseDTO<List<VtDTO>> listAllCityVt();
//
//    /**
//     * 描述: 获取所有市（按首字母分组）
//     *
//     * @return
//     * @author guoqiao
//     * @since 2021/5/31 13:43
//     */
//    @ApiOperation(value = "查询所有市", response = ResponseDTO.class)
//    ResponseDTO<Map<String, List<VtDTO>>> listAllCityMap();
//
//    /**
//     * 描述: 获取所有市（按首字母分组）
//     *      除了市 id 名称 还返回 省份的id 名称 以及 市第一个字母
//     *
//     * @version v1.0
//     * @return com.zmn.common.dto2.ResponseDTO<java.util.List<com.zmn.plat.common.dto.area.CitySimpleDRO>>
//     * @author jiafei
//     * @since 2021/8/13 17:41
//     */
//    @ApiOperation(value = "查询所有市", response = ResponseDTO.class)
//    ResponseDTO<List<CitySimpleDRO>> listAllCityProvince();
//
//    @ApiOperation(value = "获取所有的市", response = ResponseDTO.class, notes = "员工id为非正整数则查询城市级别的数据不考虑数据权限", tags = {"所有城市"})
//    ResponseDTO<List<VtDTO>> listAllCityVtByStaffId(@ApiParam(value = "员工ID") Integer staffId);
//
//    @ApiOperation(value = "获取所有的市", response = ResponseDTO.class, notes = "参数为空则不过滤数据权限", tags = {"所有城市", "数据权限"})
//    ResponseDTO<List<VtDTO>> listAllCityVtByLimitPermit(@NotNull(message = "limitPermit不能为空") @ApiParam(value = "是否过滤数据权限", required = true) Boolean limitPermit);
//
//    /**
//     * 描述: 获取所有的市完整实体信息
//     *
//     * @return 区域AreaDRO集合
//     * @author wangjie
//     * @since 15:39 2019/4/23
//     **/
//    @ApiOperation(value = "获取所有的市完整实体信息", response = ResponseDTO.class, notes = "获取所有的市完整实体信息", tags = {"所有城市"})
//    ResponseDTO<List<AreaDRO>> listAllCity();
//
//    @ApiOperation(value = "获取所有的市完整实体信息", response = ResponseDTO.class, notes = "staffId为非正整数查询城市级别的数据", tags = {"所有城市"})
//    ResponseDTO<List<AreaDRO>> listAllCityByStaffId(@ApiParam(value = "员工id") Integer staffId);
//
//    /**
//     * 查询所有省
//     *
//     * @return com.zmn.common.dto. ResponseDTO<com.zmn.common.dto.VtDTO>
//     */
//    @ApiOperation(value = "查询所有省", response = ResponseDTO.class, notes = "查询所有省", tags = {"省"})
//    ResponseDTO<List<VtDTO>> listAllProvinceVt();
//
//    /**
//     * 查询所有省份和城市以及他们上下级的关系
//     *
//     * @return KvModel<省份ID , 省份名称 , 下级城市集合KvModel < 城市ID , 城市名称>>
//     */
//    @ApiOperation(value = "查询所有省份和城市以及他们上下级的关系", response = ResponseDTO.class, notes = "查询所有省市", tags = {"省", "市"})
//    ResponseDTO<List<KvModel<Integer, String>>> listAllProvinceAndCity();
//
//    /**
//     * 根据省ID查询市，传null则查所有市
//     *
//     * @param provinceId
//     *            省ID
//     * @return VtDTO（城市ID，城市名称）集合
//     */
//    @ApiOperation(value = "根据省ID查询市", response = ResponseDTO.class, notes = "传null则查所有市", tags = {"省", "市"})
//    ResponseDTO<List<VtDTO>> listCityVtByProvinceId(@ApiParam(value = "省id", required = false) Integer provinceId);
//
//    /**
//     * 根据ID集合查询区域
//     *
//     * @param ids
//     *            区域ID集合
//     * @return VtDTO（区域ID，区域名称）集合
//     */
//    @ApiOperation(value = "根据ID集合查询区域", response = ResponseDTO.class, notes = "最大" + DubboConsts.MAX_PARAM_LENGTH + "不能为空", tags = {"id集合"})
//    ResponseDTO<List<VtDTO>> listAreaVtByIds(@NotEmpty(message = "ids参数不能为空且个数不能超过" + DubboConsts.MAX_PARAM_LENGTH) @Size(min = 1, max = DubboConsts.MAX_PARAM_LENGTH,
//        message = "ids参数不能为空且个数不能超过" + DubboConsts.MAX_PARAM_LENGTH) @ApiParam(value = "区域ID集合", required = true) Integer[] ids);
//
//    /**
//     * 查询区域
//     *
//     * @param ids
//     * @return
//     */
//    @ApiOperation(value = "根据ID集合查询区域", response = ResponseDTO.class, notes = "不能为空最大" + DubboConsts.MAX_PARAM_LENGTH, tags = {"id集合"})
//    ResponseDTO<List<AreaDRO>> listAreaByIds(@NotEmpty(message = "ids参数不能为空且个数不能超过500") @Size(min = 1, max = DubboConsts.MAX_PARAM_LENGTH,
//        message = "ids参数不能为空且个数不能超过" + DubboConsts.MAX_PARAM_LENGTH) @ApiParam(value = "区域ID集合", required = true) Integer[] ids);
//
//    /**
//     * 根据城市ID，查询所有四级区域
//     *
//     * @param cityIds
//     *            城市ID
//     * @param staffId
//     *            员工ID 如果不需要数据权限可以不传
//     * @return
//     */
//    @ApiOperation(value = "根据城市ID，查询所有四级区域", response = ResponseDTO.class, notes = "cityIds最大" + DubboConsts.MAX_PARAM_LENGTH + "不能为空", tags = {"id集合"})
//    ResponseDTO<List<VtDTO>> listCountryVtByCityIds(@NotEmpty(message = "cityIds参数不能为空且个数不能超过" + DubboConsts.MAX_PARAM_LENGTH) @Size(min = 1, max = DubboConsts.MAX_PARAM_LENGTH,
//        message = "cityIds参数不能为空且个数不能超过" + DubboConsts.MAX_PARAM_LENGTH) @ApiParam(value = "城市ID集合", required = true) Integer[] cityIds, @ApiParam(value = "员工id") Integer staffId);
//
//    /**
//     * 查询区域
//     *
//     * @param ids
//     *            区域ID：可以是省、市、区/县、街道
//     * @param staffId
//     *            可为空，员工ID：用来过滤用户的数据权限
//     * @return
//     */
//    @ApiOperation(value = "根据区域ID集合查询区域", response = ResponseDTO.class, notes = "ids最大" + DubboConsts.MAX_PARAM_LENGTH + "不能为空，staffId可为空", tags = {"id集合"})
//    PermitDTO<AreaDTO> listAreaByIds(@NotEmpty(message = "cityIds参数不能为空且个数不能超过" + DubboConsts.MAX_PARAM_LENGTH) @Size(min = 1, max = DubboConsts.MAX_PARAM_LENGTH,
//        message = "cityIds参数不能为空且个数不能超过500") @ApiParam(value = "城市ID集合", required = true) Integer[] ids, @ApiParam(value = "员工id") Integer staffId);
//}
